/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

  
import java.awt.Image; 
import javax.swing.ImageIcon; 

/**
 *
 * @author gabriel
 */
public abstract class Fantasma {

    private String nombre= "Fantasma"; //Blinky, Pinky, Inky o Clyde
    private boolean miedo;
    private int x, y;
    private final String vulnerableGhostPath = "/resources/vulnerable_ghost.jpeg";
    private Image vulnerableGhostImage;
    private int velocidad = 1;

    
    public Fantasma() {   
        ImageIcon vgii = new ImageIcon(this.getClass().getResource(vulnerableGhostPath));
        this.vulnerableGhostImage = vgii.getImage();        
        this.miedo = false;
    }
    
    public Fantasma(int x, int y) {
        ImageIcon vgii = new ImageIcon(this.getClass().getResource(vulnerableGhostPath));
        this.vulnerableGhostImage = vgii.getImage();
        this.x = x;
        this.y = y;
        this.miedo = false;
    } 
    
    /**
     * Este algorimo será diferente en cada fantasma ya que cada uno se mueve de
     * forma diferente. Este algorimo en concreto solo mantiene la dirección
     * actual, y cuando encuentra un obstaculo sigue la dirección de las agujas
     * del reloj.
     * @param map
     */
    public void avanza(Mapa map) { 
       
        if (!colision(map)){
            //si no hay muro a la derecha y no hemos llegado al final?
            if (map.getElement(this.x+1, this.y)!='1'){
                this.x++; //avanzamos por la derecha
            }
            //veamos hacia abajo
            if(map.getElement(this.x, this.y+1)!='1'){
                this.y++;
            }
            //izquierda
            if(map.getElement(this.x-1, this.y)!='1'){
                this.x--;
            }
            //veamos hacia arriba
            if(map.getElement(this.x, this.y-1)!='1'){
                this.y--;
            }
        }
           
        System.out.println(this.getClass().getName().toString() +".avanza()");
       
    }
    
    /**
     * 
     * @param map
     * @return 
     */
    public boolean colision(Mapa map) {
        boolean ok = false;
        if (this.x>=0 && this.x<PacmanUtils.COLUMNAS && this.y>=0 && this.y<PacmanUtils.FILAS) { 
            ok = map.getElement(this.x, this.y)=='1'; 
        } 
        
        return ok;
    }
    
    
    
    
    public void aCasa() { 
        this.x = 9;
        this.y = 7;
    }

    public boolean isMiedo() {
        return miedo;
    }

    public void setMiedo(boolean miedo) {
        this.miedo = miedo;
    }

    public int getVelocidad() {
        return velocidad;
    }

    public void setVelocidad(int velocidad) {
        this.velocidad = velocidad;
    }

    public Image getVulnerableGhostImage() {
        return vulnerableGhostImage;
    }

      
    
    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

   
    
    

    

}
